//package com.ruoyi.framework.config;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.HashSet;
//import java.util.List;
//import javax.sql.DataSource;
//import org.apache.ibatis.io.VFS;
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.mybatis.spring.SqlSessionFactoryBean;
//import org.mybatis.spring.annotation.MapperScan;
//import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
//
//import org.mybatis.spring.mapper.MapperScannerConfigurer;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.env.Environment;
//import org.springframework.core.io.Resource;
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//import org.springframework.core.io.support.ResourcePatternResolver;
//import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
//import org.springframework.core.type.classreading.MetadataReader;
//import org.springframework.core.type.classreading.MetadataReaderFactory;
//import org.springframework.util.ClassUtils;
//
///**
// * Mybatis支持*匹配扫描包
// *
// * @author ruoyi
// */
//@Configuration
//public class MyBatisConfig
//{
//
////    @Bean
////    public MapperScannerConfigurer mapperScannerConfigurer(){
////        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
////        //可以通过环境变量获取你的mapper路径,这样mapper扫描可以通过配置文件配置了
////        scannerConfigurer.setBasePackage("com.ruoyi.project.*.mapper");
////        return scannerConfigurer;
////    }
//
////    @Autowired
////    private Environment env;
////
////    static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
////
////    public static String setTypeAliasesPackage(String typeAliasesPackage)
////    {
////        ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
////        MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
////        List<String> allResult = new ArrayList<String>();
////        try
////        {
////            for (String aliasesPackage : typeAliasesPackage.split(","))
////            {
////                List<String> result = new ArrayList<String>();
////                aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
////                        + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
////                Resource[] resources = resolver.getResources(aliasesPackage);
////                if (resources != null && resources.length > 0)
////                {
////                    MetadataReader metadataReader = null;
////                    for (Resource resource : resources)
////                    {
////                        if (resource.isReadable())
////                        {
////                            metadataReader = metadataReaderFactory.getMetadataReader(resource);
////                            try
////                            {
////                                result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
////                            }
////                            catch (ClassNotFoundException e)
////                            {
////                                e.printStackTrace();
////                            }
////                        }
////                    }
////                }
////                if (result.size() > 0)
////                {
////                    HashSet<String> hashResult = new HashSet<String>(result);
////                    allResult.addAll(hashResult);
////                }
////            }
////            if (allResult.size() > 0)
////            {
////                typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
////            }
////            else
////            {
////                throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
////            }
////        }
////        catch (IOException e)
////        {
////            e.printStackTrace();
////        }
////        return typeAliasesPackage;
////    }
////
////    @Bean
////    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
////    {
////        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
////        String mapperLocations = env.getProperty("mybatis.mapperLocations");
////        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
////        VFS.addImplClass(SpringBootVFS.class);
////
////        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
////        sessionFactory.setDataSource(dataSource);
////        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
////        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
////        return sessionFactory.getObject();
////    }
//}